<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 行内式 -->
    <!-- <input type="button" value="点我一下" onclick="alert('haha')"> -->
    <!-- 内嵌式 -->
    <script>
        // alert("haha");
    </script>
    <!-- 外部式 -->

    <script>
        // 弹出一输入框
        // prompt("请输入您的姓名：");
        // // 弹出一个输出框
        // alert("halle!");
        // //向控制台输出日志
        // console.log("这是一条日志");
        //创建变量
        // var name = 'zhangsan';
        // var age = 20;
        // console.log(age);//读取变量内容
        // age = 30;//修改变量内容

        // var name = prompt("请输入姓名：");
        // var age = prompt("请输入年龄");
        // var score = prompt("请输入分数");
        // alert("您的姓名是：" + name + "\n" +
        //       "您的年龄是：" + age + "\n" +
        //       "您的分数是：" + score + "\n");

        // var a = 10;//数字
        // a = "hehe";//字符串

        // var a = 07;//八进制整数 - 以0开头
        // var b = 0xa;//十六进制整数 - 以0x开头
        // var c = 0b10;//二进制整数 - 以0b开头

        // var max = Number.MAX_VALUE;
        // console.log(max*2);
        // console.log(-max*2);
        // console.log('hehe'-20);

        // var a;
        // console.log(a);
        // console.log(a + "10");//与字符串拼接
        // console.log(a + 10);//与数字运算


        // var b = null;
        // console.log(b + 10);
        // console.log(b + "10");

        //创建数组
        var arr = new Array();
        //使用字面量方式创建
        var arr1 = [];
        var arr2 = [1, 2, 'haha', false];//数组中的内容称为“元素
        //js中的数组不要求元素是相同类型

        //获取数组元素
        //使用下标的方式访问数组元素（从0开始）
        // var arr3 = ['小猪佩奇', '小猪乔治', '小羊苏西'];
        // console.log(arr3);
        // console.log(arr3[0]);
        // console.log(arr3[1]);
        // console.log(arr3[2]);
        // arr3[2] = '小猫凯迪';
        // console.log(arr3);

        // console.log(arr3[3]);//undefined
        // console.log(arr3[-1]);//undefined

        //通过修改length新增
        //相当于在末尾新增元素，新增的元素默认值为undefined
        // var arr = [9, 5, 2, 7];
        // arr.length = 6;
        // console.log(arr);
        // console.log(arr[4], arr[5]);

        // //通过下标新增
        // //如果下标超出范围赋值元素，则会给指定位置插入新元素
        // var arr2 = [];
        // arr2[2] = 10;
        // console.log(arr2);

        // //使用push进行追加元素
        // arr2.push(3);
        // console.log(arr2);


        //使用splice方法删除元素
        // var arr = [9, 5, 2, 7];
        // //从下标为2的位置开始，删除1个元素
        // arr.splice(2, 1);//参数分别表示：删除的起始位置，删除的元素个数
        // console.log(arr);


        // function 函数名(形参列表) {
        //     函数体
        //     return 返回值;
        // }

        // var a = {};//创建了一个空的对象
        // var student = {
        //     name: '蔡徐坤',
        //     height: 175,
        //     weight: 170,
        //     sayhello: function() {
        //         console.log("hello");
        //     }
        // };

        // //1.使用.成员访问运算符来访问属性
        // console.log(student.name);
        // //2.使用[]访问属性，此时属性需要加上引号
        // console.log(student['height']);
        // //3.调用方法，记得机上（）
        // student.sayhello();

        // var student = new Object();//和创建数组类似
        // student.name = "蔡徐坤";
        // student.height = 175;
        // student['weight'] = 170;
        // student.sayhello = function() {
        //     console.log("hello");
        // }

        // console.log(student.name);
        // console.log(student['weight']);
        // student.sayhello();

        // function 构造函数名(形参) {
        //     this.属性 = 值;
        //     this.方法 = function() {

        //     }
        // }

        // var obj = new 构造函数名(实参);

        var arr = [5, 4, 3, 2, 1];
        function binarySearch(arr, val) {
            var left = 0;
            var right = arr.length - 1;
            while(left < right) {
                var mid = parseInt((left + right) / 2);
                if (val == arr[mid]) {
                    return mid;
                } else if (val < arr[mid]) {
                    right = mid - 1;
                } else {
                    left = mid + 1;
                }
            }
            return -1;
        }

        console.log(binarySearch(arr,3));
        console.log(binarySearch(arr,0));

        var arr2 = [10, 9, 8, 7, 6, 5];

        function bubbleSort(arr) {
            for (var i = 0; i < arr.length - 1; i++) {
                var flg = false;
                for (var j = 0; j < arr.length - i - 1; j++) {
                    if (arr[j] > arr[j + 1]) {
                        flg = true;
                        var tmp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = tmp;
                    }
                }
                if (flg == false) {
                    return;
                }
            }
        }

        // bubbleSort(arr2);

        function pivotIndex(arr, start, end) {
            var left = start;
            var right = end;
            var pivot = arr[left];
            while ( left < right) {
                while (left < right && arr[right] >= pivot) {
                    right--;
                }
                arr[left] = arr[right];
                while (left < right && arr[left] <= pivot) {
                    left++;
                }
                arr[right] = arr[left];
            }
            arr[left] = pivot;
            return left;
        }

        function quickSort2(arr, start, end) {
            if (start == end) {
                return;
            }
            if (start > end) {
                return;
            }
            var i = pivotIndex(arr, start, end);
            quickSort2(arr,start,i-1);
            quickSort2(arr,i+1,end);
        }
        
        function quickSort(arr) {
            quickSort2(arr,0,arr.length-1);
        }

        quickSort(arr2);
        console.log(arr2);

        
    </script>

</body>
</html>